package com.itic.develop.meeting.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.itic.appbase.applications.sys.common.service.OutCommonService;
import com.itic.appbase.applications.sys.user.persistence.model.SysUser;
import com.itic.appbase.applications.sys.user.persistence.model.SysUserExample;
import com.itic.appbase.applications.sys.user.service.SysUserService;
import com.itic.appbase.framework.common.constants.DBConst;
import com.itic.appbase.framework.common.constants.IticConst;
import com.itic.appbase.framework.common.constants.ResponseCode;
import com.itic.appbase.framework.common.controller.BaseController;
import com.itic.appbase.framework.exception.definition.ParameterErrorException;
import com.itic.appbase.framework.utils.StringHelper;
import com.itic.develop.meeting.persistence.model.Meeting;
import com.itic.develop.meeting.persistence.model.MeetingExample;
import com.itic.develop.meeting.persistence.model.MeetingExample.Criteria;
import com.itic.develop.meeting.service.MeetingService;


@Controller
@RequestMapping(value="/develop/meeting")
public class MeetingController
     extends BaseController {
    @Autowired
    private MeetingService meetingService;
    @Autowired
    private SysUserService sysUserService;
    @Autowired
   	protected OutCommonService outCommonService;

   	////////////////////////////////////////////////////// 常量区////////////////////////////////////////////////////////////////
   	private static final String MODEL_NAME_CHINA = "工具管理";// 中文名
   	private static final String MODEL_NAME＿ENGLISH = "meeting";// 英文名
   	private static final String PAGE_COMMON_PATH = "/develop/meeting/meeting";// 通用路径
   	private static final String COMMON_URL = "/develop/meeting/";// 通用路径

   	////////////////////////////////////////////////////// 页面跳转区////////////////////////////////////////////////////////////

   	/*
   	 * 主页面
   	 */
   	@RequestMapping(value = "/init")
   	public String init(Model model) {
   		model.addAttribute("name_china", MODEL_NAME_CHINA);
   		model.addAttribute("name_english", MODEL_NAME＿ENGLISH);
   		model.addAttribute("common_url", COMMON_URL);
   		return PAGE_COMMON_PATH + "Main";
   	}

   	/*
   	 * 添加页面
   	 */
   	@RequestMapping(value = "/initAdd")
   	public String initAdd(Model model) {
   		model.addAttribute("name_china", MODEL_NAME_CHINA);
   		model.addAttribute("name_english", MODEL_NAME＿ENGLISH);
   		model.addAttribute("common_url", COMMON_URL);
   		return PAGE_COMMON_PATH + "Add";
   	}

   	/*
   	 * 编辑页面
   	 */
   	@RequestMapping(value = "/initEdit")
   	public String initEdit(String id, Model model) {
   		if (StringHelper.isNotBlank(id)) {
   			Meeting Meeting = meetingService.get(id);
   			model.addAttribute("editData", iticJsonMapper.toJson(Meeting));
   			model.addAttribute("name_china", MODEL_NAME_CHINA);
   			model.addAttribute("name_english", MODEL_NAME＿ENGLISH);
   			model.addAttribute("common_url", COMMON_URL);
   		} else {
   			throw new ParameterErrorException();
   		}
   		return PAGE_COMMON_PATH + "Edit";
   	}

   	/*
   	 * 查看页面
   	 */
   	@RequestMapping(value = "/initView")
   	public String initView(String id, Model model) {
   		if (StringHelper.isNotBlank(id)) {

   			Meeting Meeting = meetingService.get(id);
       		
   			model.addAttribute("viewEdit", iticJsonMapper.toJson(Meeting));
   			model.addAttribute("name_china", MODEL_NAME_CHINA);
   			model.addAttribute("name_english", MODEL_NAME＿ENGLISH);
   			model.addAttribute("common_url", COMMON_URL);
   		} else {
   			throw new ParameterErrorException();
   		}

   		return PAGE_COMMON_PATH + "View";
   	}

   	////////////////////////////////////////////////////// 业务代码区////////////////////////////////////////////////////////////

   	/**
   	 * 添加模板管理数据
   	 * 
   	 * @param android
   	 * @return
   	 */
   	@RequestMapping(value = "/add")
   	@ResponseBody
   	public Map<String, String> add(Meeting temp) {

   		Map<String, String> resultMap = new HashMap<String, String>();
   		String result = ResponseCode.SERVER_ERROR.getCode();
   	    String unescapeXml = StringEscapeUtils.unescapeXml(temp.getContent());
        temp.setContent(unescapeXml);
        
   		result = meetingService.add(temp);

   		resultMap.put(IticConst.RESULT, result);
   		return resultMap;
   	}

   	/**
   	 * <p>
   	 * Title:queryCondition
   	 * </p>
   	 * <p>
   	 * Description:封装查询条件
   	 * </p>
   	 * 
   	 * @param jzdw
   	 * @param jzdwExample
   	 * @return
   	 */
   	private MeetingExample queryCondition(HttpServletRequest request, Meeting Meeting) {

   		// 参数处理
   		MeetingExample example = new MeetingExample();
   		// 按创建时间倒序
   		example.setOrderByClause("UPDATE_TIME DESC");
   		// 按排列号顺序
   		//example.setOrderByClause("reorder asc");

   	    Criteria criteria = example.createCriteria().andIsEffectiveEqualTo(DBConst.TRUE);

   		// 过滤组织机构
   		// User user = findUserSession(request);
   		// criteria.andOrgCodeEqualTo(user.getOrganizationCode());

   		// 查询条件
   		if (null != Meeting) {
   			// 模糊查询
   			if (StringHelper.isNotBlank(Meeting.getTitle())) {
   				criteria.andTitleLike("%" + Meeting.getTitle() + "%");
   			}
   		}
   		return example;
   	}

   	/**
   	 * 
   	 * @param goldType
   	 * @param request
   	 * @return
   	 */
   	@RequestMapping(value = "/list")
   	@ResponseBody
   	public Map<String, Object> list(Meeting Meeting, HttpServletRequest request) {
   		// 声明返回对象
   		Map<String, Object> resultMap = new HashMap<String, Object>();

   		MeetingExample example = this.queryCondition(request, Meeting);
   		// 封装分页参数
   		example = this.handlePageQuery(request, example);

   		// 获取信息总条数
   		int total = meetingService.count(example);

   		// 获取数据
   		List<Meeting> list = meetingService.list(example);
   		if( list.size()>0 ){
   			for( Meeting temp: list ){
   				if( StringHelper.isNotBlank(temp.getMainSay()) ){
   					SysUser sysUser = sysUserService.get(temp.getMainSay());
   					if( null != sysUser ){
   						temp.setMainSay(sysUser.getRealname());
   					}
   				}
   			}
   		}

   		// 数据返回处理
   		resultMap.put(IticConst.TOTAL_RECORDS, total);
   		resultMap.put(IticConst.DISPLAY_RECORDS, total);
   		resultMap.put(IticConst.RESULT, ResponseCode.SUCCESS.getCode());
   		resultMap.put(IticConst.DATA, list);
   		return resultMap;

   	}

   	/**
   	 * 编辑保存
   	 * 
   	 * @param templet
   	 * @return
   	 */
   	@RequestMapping(value = "/edit")
   	@ResponseBody
   	public Map<String, String> edit(String delFileIds, Meeting temp) {
   		Map<String, String> resultMap = new HashMap<String, String>();
   		String result = ResponseCode.SERVER_ERROR.getCode();
   	    String unescapeXml = StringEscapeUtils.unescapeXml(temp.getContent());
        temp.setContent(unescapeXml);
   		result = meetingService.edit(temp);

   		resultMap.put(IticConst.RESULT, result);
   		return resultMap;
   	}

   	/**
   	 * 删除
   	 * 
   	 */
   	@RequestMapping(value = "/del")
   	@ResponseBody
   	public Map<String, String> del(String id) {
   		Map<String, String> resultMap = new HashMap<String, String>();
   		String result = ResponseCode.SERVER_ERROR.getCode();

   		// 删除一个
   		if (StringHelper.isNotBlank(id)) {
   			Meeting Meeting = new Meeting();
   			Meeting.setId(id);
   			result = meetingService.delete(Meeting);
   		}

   		resultMap.put(IticConst.RESULT, result);
   		return resultMap;
   	}
   	
	/**
   	 * 删除
   	 * 
   	 */
   	@RequestMapping(value = "/peoples")
   	@ResponseBody
   	public List<SysUser> peoples() {
   		SysUserExample example = new SysUserExample();
   		com.itic.appbase.applications.sys.user.persistence.model.SysUserExample.Criteria criteria = example.createCriteria();
   		criteria.andIsEffectiveEqualTo(DBConst.TRUE);
   		return sysUserService.list(example);
   	}

}